home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / coding / dsp / bfltlib.exe / LNG_SQRT.ASM < prev    next >
Assembly Source File  |  1991-05-14  |  2KB  |  67 lines

  1. ;**************************************************************
  2. ;  
  3. ;                 lng_sqrt.asm
  4. ;  
  5. ;                 Keith Larson
  6. ;  
  7. ;                 05-14-91
  8. ;  
  9. ;           (C) Texas Instruments Inc., 1992 
  10. ;  
  11. ;           Refer to the file 'license.txt' included with this 
  12. ;           this package for usage and license information. 
  13. ;  
  14. ;**************************************************************
  15. ***********************************************************
  16. * lng_sqrt.asm    (C callable)                  *
  17. * Written By Keith Larson      4/24/91              *
  18. *            DSP Applications                             *
  19. *            Texas Instruments                            *
  20. *   s     |-----------|      This routine uses a succesive   *
  21. *   t     |    AR0    |      approximation technique that      *
  22. *   a     |-----------|      holds both the test bit and      *
  23. *   c     |    AR2    |      the guess in ARx registers      *
  24. *   k     |-----------|                      *
  25. * entry> |   guess   |      mem config   |pi/di|pe/de|      *
  26. *     |-----------|      -------------|-----|-----|      *
  27. *     | input hi  |      cycles (pos) |     |~300 |      *
  28. *     |-----------|           (0/neg) |   7 |     7 |      *
  29. *     | input lo  |                      *
  30. *     |-----------|                      *
  31. ***********************************************************
  32.      .global _lng_sqrt
  33. _lng_sqrt:
  34.      blez  ret_0        ;
  35.      adrk  2        ;           >AR0
  36.      sar   AR0,*-        ;store AR0       >AR2
  37.      sar   AR2,*-        ;store AR2       >AR3
  38.      lrlk  AR0,08000h    ;initial test bit
  39.      lrlk  AR2,08000h    ;initial guess 0
  40.      ;------------------------------------------------;
  41.      ; This section performs successive aproximation  ;
  42.      ;------------------------------------------------;
  43. more:     sar   AR2,*        ;store guess
  44.      lt    *        ;square guess (unsigned)
  45.      mpyu  *-        ;
  46.      pac            ;
  47.      subh  *-        ;ACCU = guess - input
  48.      subs  *+        ;
  49.      mar   *+,AR0        ;
  50.      bgz   to_hi,*BR0+,AR2    ;AR0>>1;  guess^2 > input?
  51. to_low     mar   *0+,AR0        ;add test bit if guess too low
  52.      banz  more,*,AR1    ;more test bits?
  53.      b     done        ;
  54. to_hi:     mar   *0-,AR0        ;sub test bit if guess too high
  55.      banz  more,*,AR1    ;more test bits
  56.      larp  AR2        ;Always +1 LSB error
  57.      mar   *-,AR1        ;subtract LSB
  58. done:     sar   AR2,*        ;store final guess (result)
  59.      zals  *+        ;load result in ACCU
  60.      lar   AR2,*+        ;restore AR0 & AR2
  61.      lar   AR0,*        ;
  62.      sbrk  2        ;restore AR1
  63.      ret            ;
  64. ret_0:     zac            ;if input <=0
  65.      ret            ;then return 0
  66.      .end
  67.